import random

# 　转义转义等基本操作 和字符串处理

"""
字符串保留区：
字符串常规操作
    find: 从左向右查找，只要遇到符合要求的则返回位置，没有找到符合任何要求的则返回-1
    rfind：从右向左
    count：计数
    index：表示查找，找不到会报错
    rindex：
"""
# 字符串
s1 = 'hello'
print(s1)
# 获取内存地址
print(id(s1))
s2 = s1
print(s2)
print(id(s2))
s3 = 'hello'
print(s3)
print(id(s3))
print(s1, s2, s3)
# is 比较
s4 = 'hello1'
print(s1 is s4)

# s1 更改了地址指向，存的是地址
s1 = 'word'
print(s1, s2, s3)

# 字符串获取 截取
'''
字符串索引机制：
    1. 0~len(s) -1
    2. -len(s) ~ -1
'''
s1 = "abcdefg"

# 字符串索引
print(s1[4])
print(s1[-3])
# 字符串长度
print(len(s1))

'''
切片：字符串，列表
格式：字符串变量[start:end:step] 
    step 正数  从左向右
    step 负数 从右向左
'''
s1 = "ABCDEFGH"
print(s1[1:4])  # BCD
print(s1[:5])  # 默认从0开始
# 输出EFGH
print(s1[4:len(s1)])
print(s1[4:])  # index 到尾
# 从头到位取数
print(s1[:])
print(id(s1))  # 地址一样
print(id(s1[:]))  # 地址一样
# 去头去尾
print(s1[1:-1])
print(s1[1:])

# 步长：正数
print(s1[1: -1:2])
print(s1[1::2])

# 步长：负数
print(s1[::-2])
print(s1[::-1])
print(s1[1:-1:-2])
print(s1[-1:1:-2])
print(s1[-1::-2])
print(s1[1::-2])

print("常规操作-", "***" * 20)

'''
字符串常规操作
    find: 从左向右查找，只要遇到符合要求的则返回位置，没有找到符合任何要求的则返回-1
    rfind：从右向左
    count：计数
    index：表示查找，找不到会报错
    rindex：
'''
path = "https://www.bilibili.com/video/BV1R7411F7JV?p=32&spm_id_from=pageDriver"

# find、index、rfind、rindex
# 从左向右
i = path.find('_')
print(i)
image_name = path[i + 1:]
print(image_name)
print("**" * 20)
# 从右向左
i = path.rfind('_')
image_name = path[i + 1:]
print(image_name)

# 查找path 中右几个_:count 指定字符的个数：
count = path.count("_")
print(count)

# index  未找到，报错：substring not found
# i = path.index("#") # 报错

i = path.index("pageDriver")
print(i)

print("判断操作-", "***" * 20)

'''
判断：startswith，endswith,isalpha,isdigit,isalnum,isspace
返回值都是布尔类型（True,False）

    startswith:判断是以什么开头
    endswith：以什么结尾
'''
result = path.startswith("http")
print(result)

'''
 模拟文件上传,键盘输入上传文件的名称，判断文件名是否大于6位以上，扩展名是否是：jpg，gif，png格式
 如果不是则提示上传失败，如果名字不满足条件，而扩展名满足条件则随机生成一个6位数字组成的文件名，打印成功上传xxx.png
 
 注意：
    + 连接符：两边的类型必须一致
'''

file_name = input("请输入上传文件名：")
index = file_name.rfind(".")
name = file_name[:index]
suffix = file_name[index + 1:]
print(name, len(name), suffix)

suffixs = ["jpg", "gif", "png"]
if not suffixs.__contains__(suffix):
    print("格式不对上传失败！")
else:
    if len(name) > 6:
        new_name = ""
        i = 1
        while i <= 6:
            new_name += str(random.randint(0, 9))
            i += 1
        print(new_name)
        print("新的文件全名", new_name + "." + suffix)
    else:
        print("文件全名", name + "." + suffix)

print("##" * 20, "代码重构", "##" * 20)

file_name = input("请输入上传文件名：")
index = file_name.rfind(".")
name = file_name[:index]
suffix = file_name[index + 1:]
print(name, len(name), suffix)

suffixs = ["jpg", "gif", "png"]
if not suffixs.__contains__(suffix):
    print("格式不对上传失败！")
else:
    if len(name) > 6:
        name = str(random.randint(100000, 999999))
        print(name)
        print("新的文件全名", str(name) + "." + suffix)
    print("文件全名", name + "." + suffix)

print("##" * 20, "代码重构：生成文件名带字母", "##" * 20)

file_name = input("请输入上传文件名：")
index = file_name.rfind(".")
name = file_name[:index]
suffix = file_name[index + 1:]
print(name, len(name), suffix)

suffixs = ["jpg", "gif", "png"]
if not suffixs.__contains__(suffix):
    print("格式不对上传失败！")
else:
    if len(name) > 6:
        name = ''
        while len(name) < 6:
            index = random.randint(0, 122)
            print("index->", index)
            if 0 <= index <= 9:
                name += str(random.randint(0, 9))  # 0-9数字
                continue
            if 65 <= index <= 90:
                name += str(chr(random.randint(65, 90)))  # 小写字母
                continue
            if 97 <= index <= 122:
                name += str(chr(random.randint(97, 122)))  # 大写字母
                continue
        print(name)
        print("新的文件全名", str(name) + "." + suffix)
    print("文件全名", name + "." + suffix)
